<template>
  <div class="editor">
    <div id="e" >
    </div>
  </div>
</template>

<script>
  // import i18next from 'i18next'
  import E from "wangeditor"
  import { UpLoadImg } from "@/api/common"
  import baseConfig from '@/utils/config.js'
  import axios from 'axios'
  export default {
    name: 'editor',
    data(){
      return{
        content:"",
        editor: null,
        info_:null
      }
    },
    model: {
      prop: 'desc',
      event:'change'
    },
    watch:{
      isClear(val){
       // console.log(val)
        if (val){
          this.editor.txt.clear()
         // this.info_=null
        }
      },
      desc(value) {
        // console.log("desc",value)
        if (this.editor&&value != this.editor.txt.html()) {
          // this.editor.txt.clear()
          this.editor.txt.html(this.desc)
        }
      }
    },
    props:{
      desc:{
        type:String,
        default:""
      },
 //业务中我们经常会有添加操作和编辑操作，添加操作时，我们需清除上一操作留下的缓存
      isClear:{
        type:Boolean,
        default:false
      }
    },

    methods:{
      // updateDes(des){
      //   console.log(1)
      //   if(!this.editor){
      //     setTimeout(()=>{
      //       this.updateDes(des)
      //     })
      //   }else{
      //     this.editor.txt.html(des)
      //   }
      // },
      upload(formData){
          axios({
            url:'/manager/FileUpLoad',
            method:'post',
            data:formData,
            headers:{ 'content-type': 'application/x-www-form-urlencoded' },
            withCredentials:true
          }).then((res)=>{
            return res.data
          })
      },
      initE(){
         this.editor = new E('#e')
        this.editor.config.onchangeTimeout = 1000 // 单位 ms
        this.editor.config.uploadFileName = 'file'
        this.editor.config.uploadImgServer = baseConfig.dev+'manager/FileUpLoad'  // 你的服务器地址
        // this.editor.config.uploadImgHooks = {
        //   before: function (xhr, editor, files) {
        //     // 图片上传之前触发
        //     debugger
        //     // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象，files 是选择的图片文件

        //     // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传
        //     // return {
        //     //     prevent: true,
        //     //     msg: '放弃上传'
        //     // }
        //   },
        //   success: function (xhr, editor, result) {
        //     debugger
        //     // 图片上传并返回结果，图片插入成功之后触发
        //     // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象，result 是服务器端返回的结果
        //   },
        //   fail: function (xhr, editor, result) {
        //     // 图片上传并返回结果，但图片插入错误时触发
        //     // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象，result 是服务器端返回的结果
        //   },
        //   error: function (xhr, editor) {
        //     // 图片上传出错时触发
        //     // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象
        //   },
        //   timeout: function (xhr, editor) {
        //     // 图片上传超时时触发
        //     // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象
        //   },

        //   // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式，可使用该配置
        //   // （但是，服务器端返回的必须是一个 JSON 格式字符串！！！否则会报错）
        //   customInsert: function (insertImg, result, editor) {
        //     // 图片上传并返回结果，自定义插入图片的事件（而不是编辑器自动插入图片！！！）
        //     // insertImg 是插入图片的函数，editor 是编辑器对象，result 是服务器端返回的结果

        //     // 举例：假如上传图片成功后，服务器端返回的是 {url:'....'} 这种格式，即可这样插入图片：
        //     console.log(result.url)
        //     var url = result.url
        //     insertImg(url)

        //     // result 必须是一个 JSON 格式字符串！！！否则报错
        //   }
        // }
        this.editor.config.customUploadImg = (files, insert) => { 
            /* files 是 input 中选中的文件列表 */ 
            let formData = new FormData() 
            formData.append('file', files[0]) 
            // let data = await this.upload(formData) 
            // axios({
            //   url:baseConfig.dev+'manager/FileUpLoad',
            //   method:'post',
            //   data:formData,
            //   headers:{ 'content-type': 'application/x-www-form-urlencoded' },
            //   withCredentials:true
            // }).then((res)=>{
            //   let imgUrl = baseConfig.dev+'/'+res.data.data
            //   insert(imgUrl)
            // })
            UpLoadImg(files).then((res)=>{
              if(res.code==0){
                let imgUrl=baseConfig.dev+res.data[0];
                insert(imgUrl)
              }else{
                this.$message.error(res.data)
              }
            })
        } 
        this.editor.config.linkCheck = function(text, link) {
            // 以下情况，请三选一

            // 1. 返回 true ，说明检查通过
            return true

            // // 2. 返回一个字符串，说明检查未通过，编辑器会阻止链接插入。会 alert 出错误信息（即返回的字符串）
            // return '链接有 xxx 错误'

            // 3. 返回 undefined（即没有任何返回），说明检查未通过，编辑器会阻止链接插入。
            // 此处，你可以自定义提示错误信息，自由发挥
        }
        this.editor.config.onchange = (html) => {
          this.info_ = html // 绑定当前逐渐地值
          this.$emit('change', this.info_) // 将内容同步到父组件中
        }
        this. editor.config.menus = [
          'head',  // 标题
          'bold',  // 粗体
          'fontSize',  // 字号
          'fontName',  // 字体
          'italic',  // 斜体
          'underline',  // 下划线
          'strikeThrough',  // 删除线
          'foreColor',  // 文字颜色
          'backColor',  // 背景颜色
          'link',  // 插入链接
          'list',  // 列表
          'justify',  // 对齐方式
          'quote',  // 引用
          'emoticon',  // 表情
          'image',  // 插入图片
          'table',  // 表格
          'code',  // 插入代码
          'undo',  // 撤销
          'redo'  // 重复
        ]
        // this.editor.config.lang = 'japan'
        // // 自定义语言
        // this.editor.config.languages['japan'] = {
        //     wangEditor: {
        //         请输入正文: '本文を入力してください',
        //     }
        // }
        // // 引入 i18next 插件
        // this.editor.i18next = i18next

        this.editor.create()
       this.editor.txt.html(this.desc)
      //  this.editor.txt.html(this.desc)
        },
        destroy(){

          this.editor.destroy()
          if(this.editor){this.editor = null}
        }
    },
    mounted () {
    },
  }
</script>

<style scoped>

</style>
